package day01.linkedList模拟;

/**
 * @author feng
 * @Date 2021/10/17 10:52
 * 双向链表的实现
 */
public class MylinkedList {
    //首节点
    Node first;
    // 未节点
    Node last;
    // 计数器
    int count = 0;

    public MylinkedList() {
    }

    //添加元素
    public void add(Object o) {
        if (first == null) {
            // 创捷节点对象
            Node n = new Node();
            // 头指针为空
            n.setPre(null);
            // 首节点中添加元素
            n.setObj(o);
            // 尾节点
            n.setNext(null);
            // 头尾节点均为首节点
            first = n;
            last = n;
        } else {
            // 首节点不为空
            Node n = new Node();
            // 前一个元素的地址
            n.setPre(last);
            n.setObj(o);
            //下一个元素为空
            n.setNext(null);
            //尾元素节点指向
            last.setNext(n);
            last = n;
        }
        count++;
    }

    //给到元素的数量
    public int getCount() {
        return count;
    }

    // 通过下标获取元素
    public Object get(int index){
       // 获取链表的首元素
       Node n = first;
        for (int i = 0; i < index ; i++) {
             n = n.getNext();
        }
      return n.getObj();
    }

}

class Test {
    public static void main(String[] args) {

        MylinkedList list = new MylinkedList();
        list.add("as");
        list.add("bb");
        System.out.println(list.getCount());
        Object o = list.get(1);
        System.out.println(o);

    }

}